/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package Almacenamiento;
import javax.swing.*;
import java.io.*;
import java.awt.event.*;

/**
 *
 * @author Thony
 */
public class Archivo_Secuencial_Indexado extends JFrame{
   private JTextField cnombre, capellido1, capellido2, cInd, cdireccion;
   private JLabel lnombre, lapellido1, lapellido2, lInd, ldireccion;
   private JTextArea area;
   private JScrollPane scroll;
   private JButton abrir, nuevo, guardar, buscar, mostrar;
   //objetos file donde se almacena los datos archivo es el supuesto archivo maestro;
   // Indice es el archivo donde se alamacenan las curp;
   File archivo, indice;
   JFileChooser chooser;//filechoose para crear archivo nuevo y abrir archivos existentes.
   DataInputStream dataread;//Para leer archivo.
   DataInputStream datareadIn;//Para leer el archivo indice.
   DataOutputStream datawrite;//para escribir en el archivo.
   DataOutputStream datawriteIn;//para escribir en el archivo indice.
   public  Archivo_Secuencial_Indexado(){
      super("RELACION PERSONA");
      this.setSize(350, 510);
      this.setLocation(100, 100);
      this.setResizable(false);
      this.setLayout(null);
      this.setDefaultCloseOperation(3);
      componentes();
   }
   void componentes(){
      lInd = new JLabel("Indice :");
      add(lInd);
      lInd.setBounds(10, 10, 150, 25);
      lnombre = new JLabel("Nombre :");
      add(lnombre);
      lnombre.setBounds(10, 40, 150, 25);
      lapellido1 = new JLabel("Apellido Paterno :");
      add(lapellido1);
      lapellido1.setBounds(10, 70, 150, 25);
      lapellido2 = new JLabel("Apellido Materno :");
      add(lapellido2);
      lapellido2.setBounds(10, 100, 150, 25);
      ldireccion = new JLabel("Direccion :");
      add(ldireccion);
      ldireccion.setBounds(10, 130, 150, 25);
      
      cInd = new JTextField();
      add(cInd);
      cInd.setBounds(140, 10, 205, 25);
      cnombre = new JTextField();
      add(cnombre);
      cnombre.setBounds(140, 40, 205, 25);
      capellido1 = new JTextField();
      add(capellido1);
      capellido1.setBounds(140, 70, 205, 25);
      capellido2 = new JTextField();
      add(capellido2);
      capellido2.setBounds(140, 100, 205, 25);
      cdireccion = new JTextField();
      add(cdireccion);
      cdireccion.setBounds(140, 130, 205, 25);
      
      abrir = new JButton("Abrir");
      add(abrir);
      abrir.setBounds(5, 390, 90, 25);
      
      guardar = new JButton("Guardar");
      add(guardar);
      guardar.setBounds(110, 390, 100, 25);
      guardar.setEnabled(false);
      
      nuevo = new JButton("Nuevo");
      add(nuevo);
      nuevo.setBounds(5, 420, 90, 25);
      buscar = new JButton("Buscar");
      add(buscar);
      buscar.setBounds(225, 420, 90, 25);
      buscar.setEnabled(false);
      mostrar = new JButton("Mostrar");
      add(mostrar);
      mostrar.setBounds(110, 420, 100, 25);
      mostrar.setEnabled(false);
      area = new JTextArea();
      add(area);
      area.setBounds(5, 160, 340, 220);
      scroll = new JScrollPane(area);
      add(scroll);
      scroll.setBounds(5, 160, 340, 220);
      eventos();
   }
        void eventos(){
      abrir.addActionListener(new ActionListener(){
         public void actionPerformed(ActionEvent e){
             //abre el archivo del dorectorio
            chooser = new JFileChooser();
            chooser.showOpenDialog(chooser);
            archivo = chooser.getSelectedFile();
            JOptionPane.showMessageDialog(null,"Abra el archivo de indice");
            chooser.showOpenDialog(chooser);
            indice = chooser.getSelectedFile();
            
            nuevo.setEnabled(false);
            abrir.setEnabled(false);
            mostrar.setEnabled(true);
            guardar.setEnabled(true);
            buscar.setEnabled(true);
         }
      });
      guardar.addActionListener(new ActionListener(){
         public void actionPerformed (ActionEvent e){
            String curp;
            //validacion de los campos en el formulario
            boolean cierto = false;
            if(cInd.getText().equals("")||cnombre.getText().equals("")||capellido1.getText().equals("")||capellido2.getText().equals("")||cdireccion.getText().equals("")){
               JOptionPane.showMessageDialog(null,"Todos los campos son obligatorios");
            }else{
               try{
                  datareadIn = new DataInputStream(new FileInputStream(indice));
                  while(datareadIn!=null){
                     curp = datareadIn.readUTF();//leer
                     
                     if(cInd.getText().equals(curp)){
                        cierto = true;
                        break;
                     }
                  }
               }catch(IOException ioe){}
               if(cierto == true){
                  JOptionPane.showMessageDialog(null, "Ya se encuentra registrado");
               }else{//ecribir el archivo de indices y el de aachi maestro
                  try{
                     datawriteIn = new DataOutputStream(new FileOutputStream(indice, true));
                     datawrite = new DataOutputStream(new FileOutputStream(archivo,true));
                     datawrite.writeUTF(cInd.getText());
                     datawrite.writeUTF(cnombre.getText());
                     datawrite.writeUTF(capellido1.getText());
                     datawrite.writeUTF(capellido2.getText());
                     datawrite.writeUTF(cdireccion.getText());
                     datawriteIn.writeUTF(cInd.getText());
                     
                     limpiar();
                  }catch(FileNotFoundException fnfe){}
                  catch(IOException eq){}
               }
            }        
         }
      });
      nuevo.addActionListener(new ActionListener(){//crear los archivos maestro y de indices
         public void actionPerformed(ActionEvent e){
            chooser = new JFileChooser();
            chooser.showSaveDialog(chooser);
            archivo = chooser.getSelectedFile();
            try{
               String www = archivo.getCanonicalPath();
               indice = new File(www+"index");
            }catch(IOException ioee){}
            
            nuevo.setEnabled(false);
            abrir.setEnabled(false);
            mostrar.setEnabled(true);
            guardar.setEnabled(true);
            buscar.setEnabled(true);
         }
      });
      mostrar.addActionListener(new ActionListener(){
         String curp, nombre, apellido1, apellido2, direccion;
         public void actionPerformed(ActionEvent e){
            area.setText("");
            
            try{//mostrar en la caja de area de texto todas las tuplas ingresadas
               dataread = new DataInputStream(new FileInputStream(archivo));
               while(dataread!=null){
                  curp = dataread.readUTF();
                  nombre = dataread.readUTF();
                  apellido1 = dataread.readUTF();
                  apellido2 = dataread.readUTF();
                  direccion = dataread.readUTF();
                  area.append(curp+" "+nombre+" "+apellido1+" "+apellido2+" "+direccion+"\n");
               }
            }catch(FileNotFoundException fnf){}
            catch(IOException ioe){}
            
         }
      });
     //buscar con el indice que se desea
      buscar.addActionListener(new ActionListener(){
         public void actionPerformed(ActionEvent e){
            String curp, nombre, apellido1, apellido2, direccion;
            area.setText("");
            try{
               dataread = new DataInputStream(new FileInputStream(archivo));
               while(dataread!=null){
                  curp = dataread.readUTF();
                  nombre = dataread.readUTF();
                  apellido1 = dataread.readUTF();
                  apellido2 = dataread.readUTF();
                  direccion = dataread.readUTF();
                  if(cInd.getText().equals(curp)){
                     area.append(curp+" "+nombre+" "+apellido1+" "+apellido2+" "+direccion+"\n");
                     break;
                  }
                  
               }
            }catch(FileNotFoundException fnf){}
            catch(IOException ioe){}
         }
      });
   }
   
   void eliminarIndex(){
      DataInputStream arch = null;
      DataOutputStream archtemp = null;
      String ib ="";
      String curp;
      try{
         ib = archivo.getCanonicalPath();
         archtemp = new DataOutputStream(new FileOutputStream(ib+"i",true));
         arch = new DataInputStream(new FileInputStream(indice));
         while(arch!=null){
            curp = arch.readUTF();
            
            if(cInd.getText().equals(curp)){
               continue;
                           
            }else{
               archtemp.writeUTF(curp);
            
            }
            
         }
      }catch(IOException iow){}
      try{
         arch.close();
         archtemp.close();
         
         
         File file2 = new File(ib+"te");
         if(indice.exists()){indice.delete();};
         file2.renameTo(indice);
         
      }catch(IOException va){}
   }
   void limpiar(){
      cInd.setText("");
      cnombre.setText("");
      capellido1.setText("");
      capellido2.setText("");
      cdireccion.setText("");
   }
   public static void main(String args[]){
      Archivo_Secuencial_Indexado app = new Archivo_Secuencial_Indexado();
      app.setVisible(true);
   }
}

